package cn.zyx.basic.util;

import cn.zyx.user.domain.LoginInfo;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * 登录上下文
 *      1.获取当前登录人的信息
 *      2.获取当前登录人的权限 -- 扩展
 */
public class LoginContext {

    /**
     * 通过从请求头中获得token
     * 在通过token去redis拿登录人返回
     * @return
     */
    public static LoginInfo getLoginInfo(HttpServletRequest request){
        // 获取token
        String token = request.getHeader("token");
        // 获取spring容器
        WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
        // 通过spring容器获取redis对象
        RedisTemplate redisTemplate = applicationContext.getBean("redisTemplate", RedisTemplate.class);
        // 根据token去redis获取登录人的信息loginInfo
        Object obj = redisTemplate.opsForValue().get(token);
        if (obj != null){ // 不为空，表示还没有过期
            return (LoginInfo) obj;
        }
        return null;
    }
}
